这个问题已经在这里有了答案: Express JS-无法重定向 (4个答案) 7年前关闭。 我在下面的中间件中使用passportjs。假设在用户请求某些东西时检查用户是否登录。如果未登录,则应将其重定向到登录页面。 我的请求路线如下: app.put('/ fantasyteams /:fantasyTeamId',auth.requiresLogin,fantasyteams.update); 当用户尝试更新网站中名为Fantasy Team的资源时,将调用此路由 auth.requiresLogin是一种中间件,如下所示: Exports.requiresLogin = function(req,res,next){ 如果(req.isAuthenticated()){ 返回next() } 返回res.redirect(“ / signin”); }; 登录我的用户后,我通过删除会话cookie来模拟会话到期。之后,我通过网站提出了“ / fantasyteams / 123”请求,以更新幻想团队编号123。 fantasyteams.update仅仅是mongodb / mongoose保存操作: exports.update = function(req,res){ var fantasyteam = req.fantasyteam; fantasyteam = _.extend(fantasyteam,req.body); fantasyteam.save(function(err){ res.jsonp(fantasyteam); }); }; 不出所料,上面的路由处理程序(app.put ...)捕获了请求,将其传递给auth.requiresLogin中间件以检查用户是否登录。因此事实证明,由于我删除了该用户,因此未登录他的会话Cookie。 res.redirect如预期那样被调用。但是,该网站不会重定向到登录页面。我在node.js命令日志中看到了这一点: PUT /登录404 328ms 我做错什么了?
2021-02-25 08:20:13
看来问题在于您没有用于PUT / signin的路由处理程序。原始请求是放置请求,因此当重定向时,它仍然是来自浏览器的相同“放置”请求的一部分。只需使用app.all('/ signin')添加一个放置/发布/处理程序 3 | 不是您要找的答案?浏览标记为node.js会话cookie的其他问题,这些护照表达了password.js或提出您自己的问题。